perm filename BBOF.OL1[TIM,LSP] blob
sn#771130 filedate 1984-09-25 generic text, type C, neo UTF8
COMMENT ā VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00004 00003 IN D WILL BE THE NEW FP
C00009 00004 (entry init subr)
C00011 00005 root (0)
C00015 ENDMK
Cā;
'(THIS IS THE LAP FOR ((DSK (TIM LSP)) BBOF LSP))
'(COMPILED BY LISP COMPILER /936 COMAUX /25 PHAS1 /84 MAKLAP /80 INITIA /117)
;COMPILED ON SEPTEMBER 25, 1984, AT 10:49 AM
(LAP TAK SUBR)
(ARGS TAK (() . 3))
(PUSH P (% 0 0 FIX1))
(PUSH FXP 0 1)
(PUSH FXP 0 2)
(PUSH FXP 0 3)
(MOVE 7 -1 FXP)
(CAMGE 7 -2 FXP)
(JRST 0 G0002)
(MOVE 7 0 FXP)
(JRST 0 G0001)
G0002
(MOVE 7 -2 FXP)
(SUBI 7 1)
(PUSH FXP 7)
(MOVEI 1 0 FXP)
(NCALL 3 'TAK)
(MOVE 10 -2 FXP)
(SUBI 10 1)
(MOVEI 3 -3 FXP)
(MOVEI 2 -1 FXP)
(PUSH FXP 10)
(MOVEI 1 0 FXP)
(PUSH FXP 7)
(NCALL 3 'TAK)
(MOVE 10 -3 FXP)
(SUBI 10 1)
(MOVEI 3 -4 FXP)
(MOVEI 2 -5 FXP)
(PUSH FXP 10)
(MOVEI 1 0 FXP)
(PUSH FXP 7)
(NCALL 3 'TAK)
(PUSH FXP 7)
(MOVEI 3 0 FXP)
(MOVEI 2 -1 FXP)
(MOVEI 1 -3 FXP)
(NCALL 3 'TAK)
(SUB FXP (% 0 0 6 6))
G0001
(SUB FXP (% 0 0 3 3))
(POPJ P)
()
;;; IN D WILL BE THE NEW FP
(DECLARE (SETQ ARG3 -7)
(SETQ ARG2 -6)
(SETQ ARG1 -5)
(SETQ RETVAL -4)
(SETQ RETPC -3)
(SETQ OLDFP -2)
(SETQ TEMP -1)
(SETQ LINK 0))
(LAP BBOF-TAK SUBR)
(ARGS BBOF-TAK (() . 3))
(MOVE D ROOT) ;NEXT FRAME
(MOVE FREEAC #.LINK D)
(MOVEM FREEAC ROOT) ;RELINK ROOT
(MOVE TT 0 A)
(MOVEM TT #.ARG1 D)
(MOVE TT 0 B)
(MOVEM TT #.ARG2 D)
(MOVE TT 0 C)
(MOVEM TT #.ARG3 D)
(MOVEI TT RETURN)
(MOVEM TT #.RETPC D)
(MOVEI TT IFR)
(MOVEM TT #.OLDFP D)
(JRST 0 TAKF)
RETURN
(MOVE TT #.RETVAL D)
(JRST 0 FIX1)
TAKF
(MOVE TT #.ARG2 D) ;#.ARG2
(CAMGE TT #.ARG1 D) ;#.ARG1
(JRST 0 CONT)
(MOVE TT #.ARG3 D)
(JRST 0 END)
CONT
;;; FRAME FOR OUTER CALL
(MOVE R ROOT) ;NEXT FP
(MOVE FREEAC #.LINK R) ;NEW ROOT
(MOVEM FREEAC ROOT) ;STORED
(MOVEM R #.TEMP D) ;STORE NEXT FP IN CURRENT FRAME
(MOVE TT #.OLDFP D)
(MOVEM TT #.OLDFP R) ;OLDFP STORED
(MOVE TT #.RETPC D) ;CURRENT RETURN ADDRESS
(MOVEM TT #.RETPC R) ;IN NEW FRAME
(MOVE R ROOT) ;NEXT FP
(MOVE FREEAC #.LINK R) ;NEW ROOT
(MOVEM FREEAC ROOT) ;STORED
(MOVE TT #.ARG1 D) ;SUB1 X
(SUBI TT 1)
(MOVEM TT #.ARG1 R) ;TRANSFER ARGS
(MOVE TT #.ARG2 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG3 D)
(MOVEM TT #.ARG3 R)
(MOVEM D #.OLDFP R) ;SAVE #.OLDFP
(MOVE D R) ;NEW FP
(MOVEI T RET1) ;RETURN PC
(MOVEM T #.RETPC R)
(JRST 0 TAKF)
RET1
(MOVE TT #.RETVAL D) ;GET RETURN VALUE
(MOVE F #.TEMP D) ;FP FOR OUTER FRAME
(MOVEM TT #.ARG1 F) ;STASH THAT
(MOVE R ROOT) ;NEXT FP
(MOVE FREEAC #.LINK R) ;NEW ROOT
(MOVEM FREEAC ROOT) ;STORED
(MOVE TT #.ARG2 D) ;SUB1 Y
(SUBI TT 1)
(MOVEM TT #.ARG1 R) ;TRANSFER ARGS
(MOVE TT #.ARG3 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG1 D)
(MOVEM TT #.ARG3 R)
(MOVEM D #.OLDFP R) ;SAVE #.OLDFP
(MOVE D R) ;NEW FP
(MOVEI T RET2) ;RETURN PC
(MOVEM T #.RETPC R)
(JRST 0 TAKF)
RET2
(MOVE TT #.RETVAL D) ;GET RETURN VALUE
(MOVE F #.TEMP D) ;FP FOR OUTER FRAME
(MOVEM TT #.ARG2 F) ;STASH THAT
(MOVE R ROOT) ;NEXT FP
(MOVE FREEAC #.LINK R) ;NEW ROOT
(MOVEM FREEAC ROOT) ;STORED
(MOVE TT #.ARG3 D) ;SUB1 Z
(SUBI TT 1)
(MOVEM TT #.ARG1 R) ;TRANSFER ARGS
(MOVE TT #.ARG1 D)
(MOVEM TT #.ARG2 R)
(MOVE TT #.ARG2 D)
(MOVEM TT #.ARG3 R)
(MOVEM D #.OLDFP R) ;SAVE #.OLDFP
(MOVE D R) ;NEW FP
(MOVEI T RET3) ;RETURN PC
(MOVEM T #.RETPC R)
(JRST 0 TAKF)
RET3
(MOVE TT #.RETVAL D) ;GET RETURN VALUE
(MOVE F #.TEMP D) ;FP FOR OUTER FRAME
(MOVEM TT #.ARG3 F) ;STASH THAT
(MOVE TT ROOT)
(MOVEM TT #.LINK D) ;ADD CURRENT FRAME TO FREELIST
(MOVEM D ROOT)
(MOVE D F)
(JRST 0 TAKF)
END
(MOVE R D) ;CURRENT FP IN R
(MOVE D #.OLDFP R) ;RETURN FP IN D
(MOVEM TT #.RETVAL D) ;RETURN VALUE
(MOVE T #.RETPC R) ;READY TO RETURN
(MOVE TT ROOT) ;RETURN CURRENT FRAME TO FREELIST
(MOVEM TT #.LINK R)
(MOVEM R ROOT)
(JRST 0 0 T) ;RETURN
(entry init subr)
(movei tt bbof)
(addi tt #o10)
(movei d 999)
(movem tt root)
(move t tt)
loop
(addi tt #o10)
(movem tt 0 t)
(addi t #o10)
(sosle 0 d)
(jrst 0 loop)
(movei a 't)
(popj p)
root (0)
bbof (block 8000.)
(0) ;arg3
(0) ;arg2
(0) ;arg1
(0) ;retval
(0) ;retpc
(0) ;oldfp
(0) ;temp
ifr (0 0 nil) ;link
()